
package andre.grids.util;

import java.util.*;
import java.util.regex.*;

/**
 *
 * @author andre
 */
public class Filters {
    /**
     * Esta classe filtra os elementos de um vetor que combinam com a string pattern
     * @autor Andre
     * @param   pattern O Padrao buscado
     * @param   filterArray Lista de pesquisa
     * @param prefix Prefixo para adicionar as ocorrencias filtradas
     * @param suffix Sufixo parar adicionar as ocorrencias filtradas
     * @param matched Indica se irá retornar as ocorrências que combinam ou as que não combinam
     * @return Lista com os elemetos filtrados
     */
    public String[] regExpFilter(String pattern, String[] filterArray, final String prefix, final String suffix,final boolean matched) {
        Pattern exp = Pattern.compile(pattern);
        FastStringArray fastArray = new FastStringArray();
        
        for(String s: filterArray)
            if (exp.matcher(s).matches()) {
                if (matched)
                    fastArray.add(prefix + s + suffix);
            } else {
                if (!matched)
                    fastArray.add(prefix + s + suffix);
            }
        
        fastArray.trim();
        return fastArray.toArray();
    }
    
    /**
     * Filtra um array de strings
     * @param pattern padrão buscado (deve ser uma Expressão regular)
     * @param filterArray array com os elementos que serão filtrados
     * @return elementos filtrados
     */
    public String[] regExpFilter(String pattern, String [] filterArray) {
        return regExpFilter(pattern, filterArray, null, null, true);
    }
    
    /**
     * Filtra um array de strings
     * @param pattern   Padrão buscado
     * @param filterArray Array com os elementos que serão filtrados
     * @param matchAll  Indica se irá retornar somente os elementos que combinão ou se será os que não combinam
     * @return elementos filtrados
     */
    public String[] regExpFilter(String pattern, String[] filterArray, final boolean matchAll) {
        return regExpFilter(pattern, filterArray, null, null, matchAll);
    }
}
